package top.lixunda.ecommerce.server.user.api.controller;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.web.bind.annotation.*;
import top.lixunda.commerce.common.core.entity.MessageObject;
import top.lixunda.common.validate.XumValid;
import top.lixunda.ecommerce.server.business.api.entity.dto.PageDTO;
import top.lixunda.ecommerce.server.user.api.entity.db.PermissionDO;
import top.lixunda.ecommerce.server.user.api.entity.dto.PermissionChangeDTO;
import top.lixunda.ecommerce.server.user.api.entity.dto.PermissionInsertDTO;
import top.lixunda.ecommerce.server.user.api.entity.dto.PermissionQueryDTO;

import java.util.List;

/**
 * 权限管理接口
 *
 * @author lixunda
 * @version time:2020/4/24 13:55
 */
@Api("权限管理接口")
@RequestMapping("/permission")
public interface IPermissionController {

    /**
     * 添加单独的权限，超级管理员调用
     *
     * @param insertList 权限添加数据DTO
     * @return 添加成功的权限信息
     */
    @ApiOperation("添加单独的权限，超级管理员调用")
    @PostMapping("insertPermission")
    MessageObject<List<PermissionDO>> insertPermission(@RequestBody List<PermissionInsertDTO> insertList);

    /**
     * 根据权限编号修改权限信息，超级管理员调用
     *
     * @param changeList 权限修改数据DTO
     * @return 修改后的权限信息
     */
    @ApiOperation("根据权限编号修改权限信息，超级管理员调用")
    @PostMapping("changePermissionById")
    MessageObject<List<PermissionDO>> changePermissionById(@RequestBody List<PermissionChangeDTO> changeList);

    /**
     * 根据权限编号删除权限信息，超级管理员调用
     *
     * @param permissionIdList 权限编号列表
     * @return 是否删除成功
     */
    @ApiOperation("根据权限编号删除权限信息，超级管理员调用")
    @PostMapping("removePermission")
    MessageObject<Boolean> removePermission(@RequestBody List<Integer> permissionIdList);

    /**
     * 根据权限编号查询单个权限信息，超级管理员调用
     *
     * @param id 权限编号
     * @return 单个权限信息
     */
    @ApiOperation("根据权限编号查询单个权限信息，超级管理员调用")
    @GetMapping("queryPermissionById")
    MessageObject<PermissionDO> queryPermissionById(@RequestParam("id") Integer id);

    /**
     * 根据多个权限编号查询多个权限信息，超级管理员调用
     *
     * @param ids 权限编号列表
     * @return 权限信息列表
     */
    @ApiOperation("根据多个权限编号查询多个权限信息，超级管理员调用")
    @PostMapping("queryPermissionByIds")
    MessageObject<List<PermissionDO>> queryPermissionByIds(@RequestBody List<Integer> ids);

    /**
     * 条件分页查询权限数据，超级管理员调用
     *
     * @param pageDTO 分页条件DTO
     * @return 分页数据
     */
    @ApiOperation("条件分页查询权限数据，超级管理员调用")
    @PostMapping("queryPermissionPageWrapper")
    MessageObject<Page<PermissionDO>> queryPermissionPageWrapper(@RequestBody @XumValid PageDTO<PermissionDO, PermissionQueryDTO> pageDTO);

}
